package fw_utils

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

type Response struct {
	// 代码
	Code int `json:"code" example:"200"`
	// 消息
	Msg string `json:"msg"`
	// 数据集
	Data interface{} `json:"data"`
	//时间戳
	TimeStamp int64 `json:"timestamp"`
}

type Page struct {
	List  interface{} `json:"list"`
	Total int64       `json:"total"`
	Page  int         `json:"page"`
	Size  int         `json:"size"`
}

type List struct {
	List  interface{} `json:"list"`
	Total int64       `json:"total"`
}

// ReturnOK 正常返回
func (res *Response) ReturnOK() *Response {
	res.Code = 200
	return res
}

// ReturnError 错误返回
func (res *Response) ReturnError(code int) *Response {
	res.Code = code
	return res
}

// 失败数据处理
func Error(c *gin.Context, code int, err error, msg string) {
	var res Response
	if err != nil {
		res.Msg = err.Error()
	}
	if msg != "" {
		res.Msg = msg
	}
	res.TimeStamp = time.Now().UnixNano()
	c.AbortWithStatusJSON(http.StatusOK, res.ReturnError(code))
}
func Error500(c *gin.Context, code int, err error, msg string) {
	var res Response
	if err != nil {
		res.Msg = err.Error()
	}
	if msg != "" {
		res.Msg = msg
	}
	res.TimeStamp = time.Now().UnixNano()
	c.AbortWithStatusJSON(http.StatusInternalServerError, res.ReturnError(code))
}

// 通常成功数据处理
func OK(c *gin.Context, data interface{}, msg string) {
	var res Response
	res.Data = data
	if msg != "" {
		res.Msg = msg
	}
	res.TimeStamp = time.Now().UnixNano()
	c.AbortWithStatusJSON(http.StatusOK, res.ReturnOK())
}

// 分页数据处理
func PageOK(c *gin.Context, result interface{}, count int64, pageIndex int, pageSize int, msg string) {
	var res Page
	res.List = result
	res.Total = count
	res.Page = pageIndex
	res.Size = pageSize
	OK(c, res, msg)
}

// 列表数据处理
func ListOK(c *gin.Context, result interface{}, count int64, msg string) {
	var res List
	res.List = result
	res.Total = count
	OK(c, res, msg)
}
